<?php
	/** SNS 新浪微博類
	*	Date: 	2012-5-17
	*	Author:	merlin
	*/
	class SNS_WEIBO {
		
		//新浪微博sdk
		private $_sdk;

		//授權后的囘調地址
		private $redirect_uri;

		public function __construct(array $params) {
			$this->_sdk = $params['sdk'];
			$this->redirect_uri = $params['redirect_uri'];
		}
		
		/** 獲取weibo登入url
		* @params['response_type']	String	支持的值包括 code 和token 默认值为code
		* @params['state']			String	用于保持请求和回调的状态。在回调时,会在Query Parameter中回传该参数
		* @params['display']		String	授权页面类型 可选范围: 
		 *  - default		默认授权页面		
		 *  - mobile		支持html5的手机		
		 *  - popup			弹窗授权页		
		 *  - wap1.2		wap1.2页面		
		 *  - wap2.0		wap2.0页面		
		 *  - js			js-sdk 专用 授权页面是弹窗，返回结果为js-sdk回掉函数		
		 *  - apponweibo	站内应用专用,站内应用不传display参数,并且response_type为token时,默认使用改display.授权后不会返回access_token，只是输出js刷新站内应用父框架
		*/
		public function getLoginUrl(array $params = array()) {
			$getAuthorizeUrlParams = array($this->redirect_uri);
			(isset($params['getAuthorizeUrlParams']) && !empty($params['getAuthorizeUrlParams'])) && $getAuthorizeUrlParams[] = $params['getAuthorizeUrlParams'];
			isset($params['state']) && $getAuthorizeUrlParams[] = $params['state'];
			isset($params['display']) && $getAuthorizeUrlParams[] = $params['display'];
			return call_user_func_array(array($this->_sdk->oauth, 'getAuthorizeURL'), $getAuthorizeUrlParams);
		}
		
		/** 獲取weibo登出url */
		public function getLogoutUrl() {
			return 'https://api.weibo.com/2/account/end_session.json?' . http_build_query(array('access_token' => $this->_sdk->oauth->access_token));
		}

		/** 獲取用戶信息 */
		public function getUserInfo() {
			$uid = null;
			$user_info = null;
			try {
				$uid = $this->_sdk->get_uid();
				if (isset($uid['uid']) && !empty($uid['uid'])) {
					$user_info = $this->_sdk->show_user_by_id($uid['uid']);
					if(isset($user_info['error']) || isset($user_info['error_code'])) {
						$user_info = null;
					}
				}
			} catch (Exception $e){
				$uid = null;
			}
			return $user_info;
		}

		/**
		 * 获取当前登录用户及其所关注用户的最新微博消息。
		 *
		 * 获取当前登录用户及其所关注用户的最新微博消息。和用户登录 http://weibo.com 后在“我的首页”中看到的内容相同。同friends_timeline()
		 * <br />对应API：{@link http://open.weibo.com/wiki/2/statuses/home_timeline statuses/home_timeline}
		 * 
		 * @access public
		 * @param int $page 指定返回结果的页码。根据当前登录用户所关注的用户数及这些被关注用户发表的微博数，翻页功能最多能查看的总记录数会有所不同，通常最多能查看1000条左右。默认值1。可选。
		 * @param int $count 每次返回的记录数。缺省值50，最大值200。可选。
		 * @param int $since_id 若指定此参数，则只返回ID比since_id大的微博消息（即比since_id发表时间晚的微博消息）。可选。
		 * @param int $max_id 若指定此参数，则返回ID小于或等于max_id的微博消息。可选。
		 * @param int $base_app 是否只获取当前应用的数据。0为否（所有数据），1为是（仅当前应用），默认为0。
		 * @param int $feature 过滤类型ID，0：全部、1：原创、2：图片、3：视频、4：音乐，默认为0。
		 * @return array
		 */
		function getHomeTimeline( $page = 1, $count = 50, $since_id = 0, $max_id = 0, $base_app = 0, $feature = 0 ) {
			return $this->_sdk->home_timeline($page, $count, $since_id, $max_id, $base_app, $feature);
		}

		/**
		 * 獲取單條時間線
		 *
		 * @param int $id 
		 * @return array
		 */
		public function getTimeline($id) {
			return $this->_sdk->show_status($id);
		}

		/**
		 * 發表一條timeline(微博)
		 *
		 * @param string $content 內容
		 * @param int $pic_path 圖片路徑
		 * @param float $lat 緯度
		 * @param float $long 經度
		 * @return array
		 */
		public function addTimeline($content, $pic_path = null, $lat = NULL, $long = NULL, $annotations = NULL) {
			if ($pic_path) {
				return $this->_sdk->upload($content, $pic_path, $lat, $long);
			} else {
				return $this->_sdk->update($content, $lat, $long, $annotations);
			}
		}

		/**
		 * 刪除一條timeline(微博)
		 *
		 * @param string $id timeline id
		 * @return array
		 */
		public function delTimeline($id) {
			return $this->_sdk->destroy($id);
		}

		/**
		 * 根據id獲取評論
		 *
		 * @param string $object_id timeline id
		 * @param array $params 額外參數
						 * @param int $page 返回结果的页码，默认为1。
						 * @param int $count 单页返回的记录条数，默认为50。
						 * @param int $since_id 若指定此参数，则返回ID比since_id大的评论（即比since_id时间晚的评论），默认为0。
						 * @param int $max_id  若指定此参数，则返回ID小于或等于max_id的评论，默认为0。
						 * @param int $filter_by_author 作者筛选类型，0：全部、1：我关注的人、2：陌生人，默认为0。
		 * @return array
		 */
		public function getComments($object_id, array $params = array()) {
			$args = array($object_id);
			isset($params['page']) && !empty($params['page']) && $args[] = $params['page'];
			isset($params['count']) && !empty($params['count']) && $args[] = $params['count'];
			isset($params['since_id']) && !empty($params['since_id']) && $args[] = $params['since_id'];
			isset($params['max_id']) && !empty($params['max_id']) && $args[] = $params['max_id'];
			isset($params['filter_by_author']) && !empty($params['filter_by_author']) && $args[] = $params['filter_by_author'];
			return call_user_func_array(array($this->_sdk, 'get_comments_by_sid'), $args);
		}

		/**
		 * 評論
		 *
		 * @param int $id
		 * @param string $content
		 * @param int $forward 是否轉發到我的微博
		 * @param int $comment_ori 当评论转发微博时，是否评论给原微博，0：否、1：是，默认为0。
		 * @return array
		 */
		public function addComment($id, $content, $forward = 0, $comment_ori = 0) {
			$forward && $this->_sdk->repost($id, $content);
			return $this->_sdk->send_comment($id, $content, $comment_ori);
		}

		/**
		 * 刪除評論
		 *
		 * @param int $id
		 * @return array
		 */
		public function delComment($id) {
			return $this->_sdk->comment_destroy($id);
		}

	}

?>